[アップデート]Terraform Cloudにリソースの自動削除ができるephemeral workspaces機能が追加されました
アップデート概要
Terraform CloudのWorkspaceの設定に自動削除の項目が追加されました。
Workspaceに削除日を指定することで、自動でWorksapceのリソースを削除する機能です。 (指定時間になるとDestroy用のRunが実行される)
この機能を使って削除日を指定しておくことで、削除忘れを防止することができます。
Terraform ephemeral workspaces public beta now available
Infrastructure and security releases open HashiConf 2023
この機能を試すには、Terraform Cloud Plusプランが必要です。(2023/8時点)
何が嬉しい
- リソース自動削除によるコスト削減、セキュリティの向上
- リソース自動削除の仕組みを作り込み不要で利用できる
- Destroy用のRunとして実行されるため、通知の設定も簡単(TFCの機能を使える)
「検証用に一時的にリソースを作っていて、消し忘れて課金が発生した」という経験がある方は多いのではないでしょうか。
また、一時的なリソースはすぐに削除するため、セキュリティ的に緩い設定になってしまっていることもあります。(セキュリティグループで必要以上に許可範囲を広くする等)
消し忘れて放置していると、セキュリティリスクになります。
一時的なリソースを自動削除することは、上記のようなコストやセキュリティの問題の解決策の一つです。
しかし、この機能を自前で構築・運用するのはそれなりに大変です。
Terraform Cloudのephemeral workspacesを使えば、自前で構築・運用不要で一時的なリソースの自動削除を実現できます。
Terraform Cloudの他の機能とも組み合わせることができます。
例えば、Terraform Cloudには通知機能があります。
この機能と組み合わせれば、自動削除の成功・失敗時にSlack通知するなども簡単にできます。
Notifications - Workspaces - Terraform Cloud | Terraform | HashiCorp Developer
検証結果まとめ
- Terraform Cloud実行モードはRemoteの必要がある
- 指定時間にDestroy用のRunが実行される
- 削除はリソースのみでWorkspace自体は削除されない
- 削除日の指定方法は以下
- 年/月/日/時/分の設定が可能
- 絶対指定のみで相対指定はできない
- 繰り返しは指定できない(例: 毎週月曜日に削除等)
- タイムゾーンはローカルが自動で設定される(UTCとか他のタイムゾーンを設定する方法は見つけられなかった)
やってみた
Workspaceを用意してリソースを作成し、自動削除の機能を使ってリソースが削除されることを確認します。
検証用Workspace作成
テスト用にWorkspaceを作ります。
以下のtfファイルを用意します。SQSキューを作成するという内容です。
provider "aws" { region = "ap-northeast-1" } terraform { cloud { workspaces { name = "sato-epehemeral-workspace-test" } } } resource "aws_sqs_queue" "sqs_queue" { name = "sato-epehemeral-workspace-test" }
terraform initを実行して、Workspaceを作成します。
$ export TF_CLOUD_ORGANIZATION="Organization名" $ terraform init
Terraform Cloudを確認すると、cloudブロックで設定した名前でWorkspaceが作成されています。
ephemeral workspacesはリモート上でリソースを削除します。
そのため、Terraform Cloudにはリソースを操作するための権限が必要です。
任意の方法でWorkspaceに対して、認証情報をセットしてください。 (今回は、Variablesで事前に用意したIAM Roleを指定しています。)
リソースの作成
上記の設定ができたら、Terraform CloudでAWSリソースを作成可能になります。
Workdspaceのサイドバー
-> Runs
-> Start Run
または、ローカルでterraform apply
を実行します。
実行後にRuns
を確認してみると、Applyが成功していることを確認できました。
AWS CLIでリソースの作成を確認します。
$ aws sqs list-queues --queue-name-prefix sato-epehemeral-workspace-test { "QueueUrls": [ "https://sqs.ap-northeast-1.amazonaws.com/1234567890/sato-epehemeral-workspace-test" ] }
tfファイルで定義したSQSキューが作成されていました。
自動削除の設定
自動削除を試していきます。
Workspaceのサイドバー
-> Settings
-> Destruction and Deletion
を選択します。
Automatically destroy
を選択します。
削除を実行する時間を設定します。
指定方法に関しては以下です。(2023/8時点)
- 年/月/日/時/分の設定が可能
- 絶対指定のみで相対指定はできない
- 繰り返しは指定できない(例: 毎週月曜日に削除等)
- タイムゾーンはローカルが自動で設定される
- UTCとか他のタイムゾーンを設定する方法は見つけられなかった
自動削除の確認
上記の設定を完了すると、Overview
からいつ自動削除が実行されるか表示されるようになります。
指定した時間になると、RunsからDestroyが実行されていることを確認できました。
おわりに
Terraform Cloudのephemeral workspacesについてでした。
自動削除を簡単に実現できるようになりました。検証時に積極的に使っていきたい機能です。
現時点では、削除日の絶対指定のみで相対指定や繰り返し設定はサポートされていません。
サポートされると、「毎週金曜日の夜に自動削除」のような事もできて便利そうです。
また、Project単位で設定可能になれば、Workspaceごとに一括設定ができるようになって管理が楽そうです。
すでにとても便利な機能ですが、今後のアップデートも楽しみですね。
以上、AWS事業本部の佐藤(@chari7311)でした。